import re
from selenium import webdriver
from selenium.webdriver.common.by import By
import csv
import time
import requests
from bs4 import BeautifulSoup


def scrape_job_data():
    # 设置 Selenium WebDriver（需安装驱动，如 ChromeDriver）
    driver = webdriver.Chrome()
    # 访问目标网站
    driver.get("http://www.job001.cn")
    time.sleep(2)  # 等待页面加载
    # 在搜索框输入“Java”并提交搜索
    try:
        search_box = driver.find_element(By.NAME, "keyWord")  # 搜索框的 name 属性为 "keyWord"
        search_box.send_keys("Java")
        search_box.submit()
        time.sleep(5)  # 等待搜索结果加载
    except Exception as e:
        print(f"搜索框交互失败: {e}")
        driver.quit()
        return
    # 获取当前页面的 URL
    current_url = driver.current_url
    # 关闭 Selenium 浏览器
    driver.quit()

    # 使用 Requests 和 BeautifulSoup 爬取页面数据
    response = requests.get(current_url)
    response.encoding = 'utf-8'  # 设置正确的编码
    html_content = response.text
    # 使用 BeautifulSoup 解析 HTML
    soup = BeautifulSoup(html_content, 'html.parser')
    # 岗位信息在特定的 class 中
    jobs_Con = soup.find_all('div', class_='jobs_Con')
    jobRight = soup.find_all('div', class_='jobRight')
    jobs = []  # 用于保存爬取的职位信息


    # 遍历每个职位信息
    for job in jobs_Con or jobRight:
        try:
            job_name = job.find('a', class_='jobNameCon').text.strip()
            salary = job.find('span', class_='salaryList').text.strip()
            # 工作年限和学历要求是兄弟节点中的纯文本
            job_details = job.find('dd').text.strip()  # 获取整个文本
            # 使用正则表达式提取工作年限和学历要求
            match = re.search(r'(\d+-\d+年|\d+-\d+年\s+及以上|经验不限|在读/应届生)?\s*\|\s*([^\|]+)?', job_details)
            if match:
                work_experience = match.group(1).strip() if match.group(1) else "无要求"
                education = match.group(2).strip() if match.group(2) else "无要求"
                # 获取公司名称，jobRight 是 job 的一部分
                jobRight = job.find('div', class_='jobRight')  # 确保从 job 的上下文中获取 jobRight
                company_name = None  # 初始化公司名称
                if jobRight:  # 检查 jobRight 是否存在
                    company_name_tag = jobRight.find('a')  # 找到包含公司名称的标签
                    if company_name_tag:
                        company_name = company_name_tag.text.strip()
                # 保存到 jobs 列表
                jobs.append({
                    '岗位名称': job_name,
                    '薪资': salary,
                    '工作年限': work_experience,
                    '学历要求': education,
                    '公司名称': company_name if company_name else "未知公司"
                })

        except AttributeError:
            # 如果某个字段没有找到，跳过该职位
            continue
    # 如果没有爬取到数据，提示用户
    if not jobs:
        print("没有爬取到任何职位信息，请检查页面结构或更新代码。")
        return
    # 保存数据到 CSV 文件
    with open('job.csv', mode='w', encoding='utf-8-sig', newline='') as file:
        writer = csv.DictWriter(file, fieldnames=['岗位名称', '薪资', '工作年限', '学历要求', '公司名称'])
        writer.writeheader()
        writer.writerows(jobs)
    print("爬取完成，数据已保存到 job.csv 文件中。")


if __name__ == "__main__":
    scrape_job_data()



